#include "led.h"

void led_init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;

    RCC_AHB1PeriphClockCmd(RCC_LED_GROUP, ENABLE);

    GPIO_InitStruct.GPIO_Pin = LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_Speed = GPIO_High_Speed;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(LED_GROUP, &GPIO_InitStruct);
}

void led_blink(void)
{
    GPIO_ResetBits(LED_GROUP, LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN);
    delay_ms(500);
    GPIO_SetBits(LED_GROUP, LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN);
    delay_ms(500);
}

void led_water(void)
{
    GPIO_ResetBits(LED_GROUP, LED1_PIN);
    delay(300);
    GPIO_ResetBits(LED_GROUP, LED2_PIN);
    delay(300);
    GPIO_ResetBits(LED_GROUP, LED3_PIN);
    delay(300);
    GPIO_ResetBits(LED_GROUP, LED4_PIN);
    delay(300);
    GPIO_SetBits(LED_GROUP, LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN);
}

/**
 * @brief  LED变速流水灯
 * @param  speed_mode: 速度模式
 * @param  water_mode: 流水灯模式
 * @param  manual_light_num: 手动亮灯数量
 * @retval None
 */
void led_change_speed_water(uint8_t speed_mode, uint8_t water_mode, uint8_t manual_light_num)
{
    if (if_password_correct && water_mode == 1)
    // if (water_mode == 0)
    {
        GPIO_ResetBits(LED_GROUP, LED1_PIN);
        delay(speed_mode * 200 + 200);
        GPIO_ResetBits(LED_GROUP, LED2_PIN);
        delay(speed_mode * 200 + 200);
        GPIO_ResetBits(LED_GROUP, LED3_PIN);
        delay(speed_mode * 200 + 200);
        GPIO_ResetBits(LED_GROUP, LED4_PIN);
        delay(speed_mode * 200 + 200);
        GPIO_SetBits(LED_GROUP, LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN);
        delay(speed_mode * 200 + 200);
    }
    // else
    // {
    //     switch (manual_light_num)
    //     {
    //     case 0:
    //         GPIO_SetBits(LED_GROUP, LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN);
    //         break;
    //     case 1:
    //         GPIO_ResetBits(LED_GROUP, LED1_PIN);
    //         GPIO_SetBits(LED_GROUP, LED2_PIN | LED3_PIN | LED4_PIN);
    //         break;
    //     case 2:
    //         GPIO_ResetBits(LED_GROUP, LED1_PIN | LED2_PIN);
    //         GPIO_SetBits(LED_GROUP, LED3_PIN | LED4_PIN);
    //         break;
    //     case 3:
    //         GPIO_ResetBits(LED_GROUP, LED1_PIN | LED2_PIN | LED3_PIN);
    //         GPIO_SetBits(LED_GROUP, LED4_PIN);
    //         break;
    //     case 4:
    //         GPIO_ResetBits(LED_GROUP, LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN);
    //         break;
    //     default:
    //         break;
    //     }
    // }
}
